/**
 * 
 */
package db;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import model.Artikel;
import model.Bestellposten;

/**
 * @author spiller.sebastian
 *
 */
public class BestellpostenBuilder {
	
	private static DbManager DbManagerInstance = DbManager.getInstance();
	private static BestellpostenBuilder BestellpostenBuilderInstance;
	
	private BestellpostenBuilder(){
	}
	
	/**
	 * @return
	 */
	public static BestellpostenBuilder getInstance() {
		if (BestellpostenBuilder.BestellpostenBuilderInstance == null) {
			BestellpostenBuilder.BestellpostenBuilderInstance = new BestellpostenBuilder();
		}
		return BestellpostenBuilder.BestellpostenBuilderInstance;
	}

	/**
	 * @return
	 */
	public List<Bestellposten> getBestellpostenByAuftragsnummer(int auftragsnummer) {

		try {
			
			ResultSet rs = DbManagerInstance.getCon().createStatement()
				.executeQuery("SELECT * FROM t_bestellposten" +
					" WHERE bestellung_id = " + auftragsnummer);
			
			List<Bestellposten> listBestellposten = 
				new ArrayList<Bestellposten>();

			while (rs.next()) {
				
				Artikel artikel = DbManagerInstance.getArtikelBuilder().getArtikel(rs.getInt("artikel_id"));
				
				Bestellposten bestellposten = new Bestellposten(
						rs.getInt("posnr"),
						artikel,
						rs.getInt("anzahl"),
						rs.getInt("bestellung_id"));
				
				listBestellposten.add(bestellposten);
			}
			
			return listBestellposten;
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public void add(List<Bestellposten> listBestellposten) {
		
		for (Bestellposten bestellposten: listBestellposten) {
	
			try {
				ResultSet rs = DbManagerInstance.getCon().createStatement()
					.executeQuery("INSERT INTO t_bestellposten" +
						" (posnr, anzahl, preis, bestellung_id, artikel_id) VALUES (" +
						String.valueOf(bestellposten.getPosnr()) + "," +
						String.valueOf(bestellposten.getAnzahl()) + "," +
						String.valueOf(bestellposten.getPreis()) + "," +
						String.valueOf(bestellposten.getAuftragsnummer()) + "," +
						String.valueOf(bestellposten.getArtikel().getArtikelnr() + ")"));
	
			}	
			 catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * @param bestellposten
	 */
	public void update(Bestellposten bestellposten) {
		// TODO This Iteration
	}
	
	/**
	 * @param bestellposten
	 */
	public void remove(Bestellposten bestellposten) {
		try {
			ResultSet rs = DbManagerInstance.getCon().createStatement()
				.executeQuery("DELETE FROM t_bestellposten WHERE" +
					" artikel_id = " + bestellposten.getArtikel().getArtikelnr() +
					" AND bestellung_id = " + bestellposten.getAuftragsnummer());
		}	
		 catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * @param auftragsnummer
	 */
	public void removeByAuftragsnummer(int auftragsnummer) {
		try {
			ResultSet rs = DbManagerInstance.getCon().createStatement()
				.executeQuery("DELETE FROM t_bestellposten WHERE" +
					" bestellung_id = " + auftragsnummer);
		}	
		 catch (SQLException e) {
			e.printStackTrace();
		}
	}
}